// 全局校验权限的核心 ， 拦截所有页面
import router from '@/router'
import { useLoginUserStore } from '@/stores/userStore'
import { ACCESS_ENUM } from './accessEnum'
import checkAccess from './checkAccess'
router.beforeEach(async (to, from, next) => {
  // 获取当前登录用户
  const loginUserStore = useLoginUserStore()
  let loginUser = loginUserStore.loginUser

  // 如果没有获取到用户信息，则自动获取
  if(!loginUser || !loginUser.userRole){
    // 加await是为了保证获取到用户信息后，才继续往下执行
    await loginUserStore.fetchLoginUser();
    loginUser = loginUserStore.loginUser;
  } 

  // 判断当前页面需要的权限
  const needAccess = (to.meta?.access as string) ?? ACCESS_ENUM.NOT_LOGIN

  // 对于无权限要求的页面
  if (needAccess !== ACCESS_ENUM.NOT_LOGIN) {
    // 未登录，跳转到登录页面
    if (!loginUser || loginUser.userRole === ACCESS_ENUM.NOT_LOGIN) {
      next(`/user/login?redirect=${to.fullPath}`)
    } else if (!checkAccess(loginUser, needAccess)) {
      // 已登录，但权限不够，跳转到无权限页面
      next('/noAuth')
      return
    }
  }
  // 有权限，放行
  next()
})
